
#include "key_read.h"

#include <stdio.h>
#include <conio.h> // 包含 _getch 和 _kbhit

KeyInput read_key()
{
    KeyInput key_input = {0, 0}; // 初始化结构体，默认无输入

    if (_kbhit())
    {                       // 检查是否有按键输入
        int key = _getch(); // 获取按键值

        if (key == 0 || key == EXTENDED_KEY)
        {                                 // 检测是否为扩展键
            key_input.is_special_key = 1; // 标记为特殊键
            key_input.value = _getch();   // 获取扩展键的扫描码
        }
        else
        {
            key_input.is_special_key = 0; // 标记为普通字符
            key_input.value = key;        // 获取普通键的 ASCII 值
        }
    }

    return key_input; // 返回按键信息
}

int testKeyRead()
{
    printf("按下任意键（按 ESC 键退出）...\n");

    while (1)
    {
        KeyInput key = read_key(); // 调用封装的函数读取键值

        if (key.value != 0)
        { // 如果有按键输入
            if (key.is_special_key)
            { // 特殊键处理
                switch (key.value)
                {
                case KEY_UP:
                    printf("方向键: 上 (0x%02X)\n", key.value);
                    break;
                case KEY_DOWN:
                    printf("方向键: 下 (0x%02X)\n", key.value);
                    break;
                case KEY_LEFT:
                    printf("方向键: 左 (0x%02X)\n", key.value);
                    break;
                case KEY_RIGHT:
                    printf("方向键: 右 (0x%02X)\n", key.value);
                    break;
                case KEY_DELETE:
                    printf("特殊键: Delete (0x%02X)\n", key.value);
                    break;
                default:
                    if (key.value >= KEY_F1 && key.value <= KEY_F12)
                    {
                        printf("功能键: F%d (0x%02X)\n", key.value - KEY_F1 + 1, key.value);
                    }
                    else
                    {
                        printf("未知特殊键: 0x%02X\n", key.value);
                    }
                    break;
                }
            }
            else
            { // 普通字符处理
                switch (key.value)
                {
                case KEY_BACKSPACE:
                    printf("特殊键: Backspace (0x%02X)\n", key.value);
                    break;
                case KEY_ENTER:
                    printf("特殊键: Enter (0x%02X)\n", key.value);
                    break;
                case KEY_ESC:
                    printf("ESC 键按下 (0x%02X)，程序退出。\n", key.value);
                    return 0; // 退出程序
                default:
                    printf("普通键: %c (ASCII: 0x%02X)\n", key.value, key.value);
                    break;
                }
            }
        }
    }

    return 0;
}